package com.shark.uh.mapper;

import com.shark.uh.model.dto.roles.RoleDTO;
import com.shark.uh.model.dto.roles.UserRoleDTO;
import com.shark.uh.model.entity.Roles;
import com.shark.uh.model.entity.User;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 *
 * @Entity com.BsetC.AccountPlatform.entity.Roles
 */
public interface RolesMapper extends BaseMapper<Roles> {


    /**
     * 查询创建者列表
     *
     * @return
     */
    List<User> selectCreator();



    /**
     * 条件查询角色表
     *
     * @param roleName  角色名称
     * @param createdBy 创建者ID
     * @param offset    偏移量
     * @param limit     数量限制
     * @return 角色列表
     */
    List<RoleDTO> list(@Param("roleName") String roleName,
                       @Param("creatorUserId") Long createdBy,
                       @Param("status") String status,
                       @Param("offset") int offset,
                       @Param("limit") int limit,
                       @Param("orderBy") String orderBy);


    /**
     * 根据userId，获取user_roles表中所有包含userId的角色记录。
     *
     * @param userId 用户ID
     * @param offset 偏移量
     * @param limit  查询数量限制
     * @return 角色列表
     */
    List<Roles> selectByUserId(@Param("userId") Long userId,
                               @Param("offset") int offset,
                               @Param("limit") int limit);


    /**
     * roleId，获取user_roles表中所有包含roleId的角色记录。
     *
     * @param roleId 角色ID
     * @param offset 偏移量
     * @param limit  查询数量限制
     * @return 用户列表
     */
    List<User> selectUsersByRoleId(@Param("roleId") Long roleId,
                                   @Param("status") String status,
                                   @Param("offset") int offset,
                                   @Param("limit") int limit);


    /**
     * 根据userIds从user_roles表中批量查询role_id以及关联的roles.role_name
     *
     * @param userIds 用户列表
     * @return UserRolesDTO
     */
    List<UserRoleDTO> selectBatchIds(List<Long> userIds);


    /**
     * 批量更新角色状态
     *
     * @param roleIds 角色ID列表
     * @param status  状态
     */
    int updateStatusBatch(@Param("roleIds") List<Long> roleIds,
                           @Param("status") String status);


    /**
     * 批量删除user_role中的记录
     *
     * @param userId  用户id
     * @param roleIds 角色列表
     */
    void deleteRelationBatch(@Param("userId") Long userId,
                             @Param("roleIds") List<Long> roleIds);


    /**
     * 批量向user_role中插入记录
     *
     * @param userId  用户id
     * @param roleIds 角色列表
     */
    void insetRelationBatch(@Param("userId") Long userId,
                            @Param("roleIds") List<Long> roleIds);

    int countByName(@Param("roleName") String roleName);

    int updateDescription(@Param("roleId") Long roleId, @Param("description") String description);



}




